/*
 * FSWUniCEUB - 2008
 * 
 * Este arquivo é de propriedade da Fábrica de Software do UniCEUB
 * 
 * Para mais informações entre em contato com a coordenação do
 * curso de Ciência da Computação da instituição.
 */

package br.uniceub.fsw.indicadores.bo;

import br.uniceub.fsw.arquitetura.servico.exception.NegocioException;
import br.uniceub.fsw.indicadores.dao.ValorDadoPrimarioDAO;
import br.uniceub.fsw.indicadores.vo.ValorDadoPrimarioVO;
import java.util.List;

/**
 * Business Object da entidade ValorDadoPrimario. Essa classe é responsável por todos as
 * funcionalidades de negócio relacionadas à entidade.
 * 
 @author Marcos Mello Nobrega Soares ra2013617/8
 */
public class ValorDadoPrimarioBO {

    /**
     * Valida se om registro de valor de dado primário está pronto para inserção.
     * 
     * @param valorDadoPrimario valor do dado primário a ser verificado.
     * @throws br.uniceub.fsw.arquitetura.servico.exception.RegraNegocioException caso o valor dado primário 
     * informado não possua condições de ser inserido no banco de dados.
     */
    public void validaValorDadoPrimario(ValorDadoPrimarioVO valorDadoPrimario) throws Exception, NegocioException {
        
        String mensagem = new String();
        
        if(valorDadoPrimario.getCdValorIndicador() == null) {
            mensagem = mensagem.concat("Valor de indicador relacionado não informado.<br />");
        }
        if(valorDadoPrimario.getCdDadoPrimario() == null) {
            mensagem = mensagem.concat("Dado primário relacionado não informado.<br />");
        }
        if(valorDadoPrimario.getVlValorDadoPrimario() == null) {
            mensagem = mensagem.concat("Valor do dado primário obrigatório.\n");
        }
        if(valorDadoPrimario.getCdValorIndicador() != null && valorDadoPrimario.getCdDadoPrimario() != null) {
            try {  
                validarVOUnico(valorDadoPrimario);
            }
            catch(NegocioException e) {
                mensagem = mensagem.concat(e.getMessage());
            }
            catch(Exception e) {
                throw new Exception(e.getMessage());
            }
        }
        
        if(!mensagem.isEmpty())
            throw new NegocioException(mensagem);
    }
    
    /**
     * Valida se já existe um registro de valor de dado primário no Banco de Dados para o dado e indicador como 
     * verificação para inserção.
     * 
     * @param valorDadoPrimario valor dado primário a ser verificado.
     * @throws br.uniceub.fsw.arquitetura.servico.exception.RegraNegocioException caso o valor de dado primário 
     * informado para o dado primário e indicador já exista.
     */
    public void validarVOUnico(ValorDadoPrimarioVO valorDadoPrimario) throws Exception, NegocioException {
        
        if(valorDadoPrimario.getCdValorIndicador() == null)
            throw new Exception("Código do valor do indicador não foi informado.");
        
        if(valorDadoPrimario.getCdDadoPrimario() == null)
            throw new Exception("Código dodado primário não foi informado.");
        
        ValorDadoPrimarioVO valorDadoPrimarioExemplo = new ValorDadoPrimarioVO();
        List<ValorDadoPrimarioVO> lista;
        ValorDadoPrimarioDAO valorDadoPrimarioDAO = new ValorDadoPrimarioDAO();
        
        valorDadoPrimarioExemplo.setCdValorIndicador(valorDadoPrimario.getCdValorIndicador());
        valorDadoPrimarioExemplo.setCdDadoPrimario(valorDadoPrimario.getCdDadoPrimario());
        lista = valorDadoPrimarioDAO.consultarPorExemplo(valorDadoPrimarioExemplo);
        
        if(!lista.isEmpty())
             throw new NegocioException("Já existe um valor de dado primário para o indicador informado na base de dados.");
    }
}
